博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python3爬虫】网易云音乐歌单下载
阅读量:6610 次
发布时间:2019-06-24

本文共 1924 字,大约阅读时间需要 6 分钟。

一、目标:

  下载网易云音乐热门歌单

 

二、用到的模块:

  requests,multiprocessing,re。

 

三、步骤:

  (1)页面分析:首先打开网易云音乐,选择热门歌单,可以看到以下歌单列表,然后打开开发者工具

   因此我们需要请求的url就是https://music.163.com/discover/playlist,然后用requests.get()方法请求页面,对于返回的结果,用正则表达式进行解析,得到歌单名字和歌单id,解析的正则表达式如下:

res = requests.get(url, headers=headers) data = re.findall('', res.text)

  

  (2)得到歌单名字和歌单id后,构造歌单的url,然后模仿步骤(1)可以得到歌曲名字和歌曲id,解析的正则表达式如下:

re.findall(r'(.*?)', res.text)

  再得到歌曲id后,构造歌曲的url,然后用requests.get().content方法下载歌曲,歌曲的url构造方法如下:

"http://music.163.com/song/media/outer/url?id=%s" %(歌曲id)

 

  (3)由于部分歌曲的名字并不能作为文件名保存下来,所以用到了try...except,对于不能保存为文件名的歌曲,我选择pass掉==

    

  (4)因为要下载多个歌单,一个歌单里又有很多歌曲,所以用到了multiprocessing模块的Pool方法,提高程序运行的效率。

 

四、具体代码

  因为下载所有歌单会需要很长时间,所以我们先下载前三个歌单试试==

1 import requests 2 import re 3 from multiprocessing import Pool 4  5 headers = { 6     'Referer': 'https://music.163.com/', 7     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 " 8                   "Safari/537.36" 9 }10 11 12 def get_page(url):13     res = requests.get(url, headers=headers)14     data = re.findall('', res.text)15 16     pool = Pool(processes=4)17     pool.map(get_songs, data[:3])18     print("下载完毕!")19 20 21 def get_songs(data):22     playlist_url = "https://music.163.com/playlist?id=%s" % data[1]23     res = requests.get(playlist_url, headers=headers)24     for i in re.findall(r'(.*?)', res.text):25         download_url = "http://music.163.com/song/media/outer/url?id=%s" % i[0]26         try:27             with open('music/' + i[1]+'.mp3', 'wb') as f:28                 f.write(requests.get(download_url, headers=headers).content)29         except FileNotFoundError:30             pass31         except OSError:32             pass33 34 35 if __name__ == '__main__':36     hot_url = "https://music.163.com/discover/playlist/?order=hot"37     get_page(hot_url)

 

五、运行结果

 

转载于:https://www.cnblogs.com/TM0831/p/9573619.html

你可能感兴趣的文章
从尾到头打印链表
查看>>
android 开发之电子钢琴 源码
查看>>
Java的jar文件安装成windows 服务
查看>>
MapGuide中怎么实现“指哪儿打哪儿”?ToolTip帮你忙~
查看>>
GridView添加统计(合计)行
查看>>
第3部分。XAML标记扩展
查看>>
Linux 定时运行脚本、命令
查看>>
如何让你的程序运行的更快(1)之续---揭秘StringBuffer的capacity
查看>>
php mysqli mysqli_query() mysqli_real_query()
查看>>
开源欣赏wordpress之用户新增user-new.php
查看>>
管理Mysql常用指令
查看>>
jQuery 2.0.3 源码分析 数据缓存
查看>>
nginx访问报错:Too many open files accept:
查看>>
NSPredicate,谓词
查看>>
MVC自定义路由的配置,必须把自己的路由写在前面
查看>>
[翻译]Java Swing(1)
查看>>
基于suse linux系统的cacti系统部署——rpm包方式
查看>>
解密jQuery内核 DOM操作的核心buildFragment
查看>>
重建索引提高SQL Server性能<转>
查看>>
大公司的流量变现
查看>>